home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / post2_g2 / src / p_doku.c < prev    next >
Text File  |  1997-10-13  |  15KB  |  615 lines

  1. /*
  2.     post / 郵便番号検索プログラム
  3.  
  4.     p_doku.c / 独自検索部
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <sys/dos.h>
  11. #include <mbstring.h>
  12. #include "post.h"
  13.  
  14.  
  15. /*
  16.     独自検索メイン
  17. */
  18. void
  19. dokuji_kensaku()
  20. {
  21.     int    ofs_taihi = 0,    /* オフセット退避用 */
  22.         kensuu = 0,    /* 検索ヒット件数 */
  23.         nextp = 0,    /* 次回検索用オフセット */
  24.         gen_page = 0,    /* 現在のページ数 */
  25.         zen_page = 0,    /* 全ページ数 */
  26.         kijun = 0,    /* 表示用基準 */
  27.         ki = 0,        /* 基準から算出した件数 */
  28.         aza_sw = 0,    /* 字名スイッチ */
  29.         s_num = 0,    /* 選択用 */
  30.         mainlp = 0,    /* 表示ループ用 */
  31.         lp = 0,        /* 表示ループ用(その2) */
  32.         lpcnt = 0,        /* 表示ループ用(その2) */
  33.         shitei_ku_unkn = 0,    /* 指定都市内の区名が不明スイッチ(長いねどうも) */
  34.         uchikiri = 0,        /* 検索打ち切りスイッチ */
  35.         slen = 0,    /* 検索文字列長さ */
  36.         i1;        /* ループ汎用 */
  37.  
  38.     uchar    pnum[12][10],    /* 郵便番号 */
  39.         pknum[12][8],    /* 旧番号 */
  40.         numwork[12],    /* 取りワーク */
  41.         numbuff[64],    /* 入力用ワーク */
  42.         bdelim;        /* 直前のデリミタ */
  43.  
  44.     int    point[GENKAI];        /* ポインタ保存用 */
  45.  
  46.     uchar    joukyou[GENKAI];    /* ヒット時のオフセット */
  47.  
  48.     uchar    page_todou[12][10],    /* ページ用の都道府県ワーク */
  49.         page_kugun[12][32],    /* ページ用の市区郡ワーク */
  50.         page_tyouson[12][32],    /* ページ用の市内区・町村ワーク */
  51.         page_azamei[12][256],    /* ページ用の字名ワーク(50文字で打ち切り) */
  52.         page_yomi0[12][16],    /* ページ用読み(都道府県) */
  53.         page_yomi1[12][64],    /* ページ用読み(市区郡) */
  54.         page_yomi2[12][64],    /* ページ用読み(市内区・町村) */
  55.         page_yomi3[12][128];    /* ページ用読み(字名) */
  56.  
  57.     struct _inpptr    inpp;
  58.  
  59.  
  60.     slen = strlen( input_str );
  61.     ofs_taihi = ofs;
  62.     ofs = 0;    /* 最初から検索 */
  63.     kensuu = 0;
  64.     do {
  65.         ofs = bm_find( '.', input_str, ofs );
  66.         if( ofs == -1 ) {
  67.             break;
  68.         }
  69.         if( kensuu == GENKAI ) {    /* 件数 == GENKAI で検索打ち切り */
  70.             uchikiri = 1;
  71.             break;
  72.         }
  73.  
  74.         /* 厳密検索 */
  75.         if( genmitsu_mode ) {    /* 限定検索モードなら */
  76.             /* いま ofs は文字列の次のデリミタ位置にある */
  77.             if( is_not_delim( buf[ofs] ) ) {    /* 直後がデリミタでない */
  78.                 continue;        /* ならば、途中で終わった */
  79.             }
  80.             if( is_not_delim( buf[ofs-slen-1] ) ) {    /* 直前がデリミタでない */
  81.                 continue;        /* ならば、途中でヒットした */
  82.             }
  83.         }
  84.  
  85.         /* ヒットしました */
  86.         nextp = ofs;    /* 今のオフセットをとっておく */
  87.         pass_back_han( '.' );    /* 直前のデリミタまで戻る */
  88.  
  89.         /* 字名限定の時は、字名以外は取らない */
  90.         if( azamei_gentei ) {
  91.             if( buf[ofs-1] != '%' ) {
  92.                 ofs = nextp;
  93.                 continue;
  94.             }
  95.         }
  96.  
  97.         /* がめる */
  98.         point[ kensuu ] = ofs - 1;    /* これはデリミタを指している */
  99.         joukyou[ kensuu ] = buf[ ofs-1 ];    /* オフセットを取っておく */
  100.         kensuu++;
  101.         ofs = nextp;    /* オフセットを戻す */
  102.     } while( 1 );
  103.     ofs = ofs_taihi;
  104.  
  105.     if( kensuu != 0 ) {        /* あった */
  106.  
  107.         gen_page = 1;            /* 1ページ目から */
  108.  
  109.         if( kensuu % 12 == 0 ) {
  110.             zen_page = kensuu / 12;
  111.         } else {
  112.             zen_page = kensuu / 12 + 1;
  113.         }
  114.  
  115.         if( zen_page == 0 ) {
  116.             zen_page = 1;
  117.         }
  118.  
  119.         mainlp = 1;
  120.         do {
  121.             _dos_c_cls_al();
  122.             status_print();
  123.             printf("該当件数 : %4d 件",kensuu );
  124.             if( uchikiri ) {    /* 検索を打ち切っていたら */
  125.                 printf("(打切)");
  126.             } else {
  127.                 printf("\t");
  128.             }
  129.             printf("\nページ : %2d / %2d\n", gen_page, zen_page);
  130.  
  131.             /* 基準値 */
  132.             kijun = (gen_page - 1) * 12;
  133.  
  134.             /* 実際に表示する件数 */
  135.             /* 1ページしかない、もしくは最終ページなら調整 */
  136.             if( gen_page == zen_page ) {
  137.                 if( zen_page >= 2 ) {
  138.                     lpcnt = kensuu - ((zen_page-1)*12);
  139.                 } else {
  140.                     lpcnt = kensuu;
  141.                 }
  142.             } else {
  143.                 lpcnt = 12;
  144.             }
  145.  
  146.             /* 初期化 */
  147.             for( i1=0; i1<=11; i1++ ) {
  148.                 page_todou[i1][0]     = '\0';
  149.                 page_kugun[i1][0]     = '\0';
  150.                 page_tyouson[i1][0]     = '\0';
  151.                 page_azamei[i1][0]     = '\0';
  152.                 page_yomi0[i1][0]     = '\0';
  153.                 page_yomi1[i1][0]     = '\0';
  154.                 page_yomi2[i1][0]     = '\0';
  155.                 page_yomi3[i1][0]     = '\0';
  156.                 pnum[i1][0]         = '\0';
  157.             }
  158.  
  159.             /* データを取ってくる */
  160.             for( i1=0; i1<=lpcnt-1; i1++ ) {
  161.  
  162.                 aza_sw = 0;
  163.                 ki = kijun + i1;
  164.                 ofs = point[ ki ] + 1;
  165.                 bdelim = joukyou[ ki ];    /* デリミタセット */
  166.  
  167.                 /* case で処理しないのには理由があるので注意 */
  168.                 if( bdelim == '%' ) {    /* 字名 */
  169.  
  170.                     /* 字名を得る */
  171.                     get_next_han( page_azamei[i1] );
  172.                     /* 50 字で打ち切り */
  173.                     if( strlen( page_azamei[i1] ) >= 48 ) {
  174.                         page_azamei[i1][48]='\0';
  175.                         strcat( page_azamei[i1], "〈略〉" );
  176.                     }
  177.                     get_next_han2( page_yomi3[i1] );    /* 読み */
  178.                     if( buf[ofs] != '*' ) {
  179. //printf("例外!!!\n");
  180.                         pass_next_han2( '*' );
  181.                     }
  182.                     ofs++;
  183.                     get_next_num( numwork );
  184.                     number_seikei( numwork );
  185.                     strcpy( pnum[i1], " " );
  186.                     strcat( pnum[i1], numwork );
  187.                     ofs++;
  188.                     get_next_num( pknum[i1] );
  189.                     aza_sw = 1;
  190.  
  191.                     /* 市区郡町村(市内区も)デリミタに */
  192.                     /* ぶつかるまで、バックトレース */
  193.                     /* 得られたデリミタは、bdelim へ */
  194.                     bdelim = backtrace();
  195.                 }
  196.  
  197.                 if( bdelim == '!' ) {    /* 市名 */
  198.  
  199.                     /* 市名を得る */
  200.                     get_next_han( page_kugun[i1] );
  201.                     strcat( page_kugun[i1], "市" );
  202.                     get_next_han2( page_yomi1[i1] );
  203.  
  204.                     if( !aza_sw ) {    /* 字名が得られていない */
  205.  
  206.                         /* 政令指定都市であれば */
  207.                         if( seirei_check( page_kugun[i1] ) != -1 ) {
  208.  
  209.                             /* 市内区が unknown である */
  210.                             shitei_ku_unkn = 1;
  211.                         }
  212.                     }
  213.  
  214.                     /* 県へ戻る準備 */
  215.                     pass_back_han( ' ' );
  216.                     bdelim = ' ';
  217.                 }
  218.  
  219.                 if( bdelim == '\"' ) {    /* 特別区 */
  220.  
  221.                     /* 区名を得る */
  222.                     get_next_han( page_kugun[i1] );
  223.                     strcat( page_kugun[i1], "区" );
  224.                     get_next_han2( page_yomi1[i1] );
  225.  
  226.                     /* 特別区は東京都に決まっているのだけど */
  227.                     pass_back_han( ' ' );
  228.                     bdelim = ' ';
  229.                 }
  230.  
  231.                 if( bdelim == '$' ) {    /* 市内区 */
  232.  
  233.                     /* 市内区名を得る */
  234.                     get_next_han( page_tyouson[i1] );
  235.                     strcat( page_tyouson[i1], "区" );
  236.                     get_next_han2( page_yomi2[i1] );
  237.  
  238.                     /* 直前の市名を得る */
  239.                     pass_back_han( '!' );
  240.                     get_next_han( page_kugun[i1] );
  241.                     strcat( page_kugun[i1], "市" );
  242.                     get_next_han2( page_yomi1[i1] );
  243.  
  244.                     /* 県へ戻る準備 */
  245.                     pass_back_han( ' ' );
  246.                     bdelim = ' ';
  247.                 }
  248.  
  249.                 if( bdelim == ':' ) {    /* 町名 */
  250.  
  251.                     /* 町名を得る */
  252.                     get_next_han( page_tyouson[i1] );
  253.                     strcat( page_tyouson[i1], "町" );
  254.                     get_next_han2( page_yomi2[i1] );
  255.                     ichien_check( pnum[i1], pknum[i1] );
  256.  
  257.                     /* 郡へ戻る準備 */
  258.                     pass_back_han( '#' );
  259.                     bdelim = '#';
  260.                 }
  261.  
  262.                 if( bdelim == ';' ) {    /* 村名 */
  263.  
  264.                     /* 町名を得る */
  265.                     get_next_han( page_tyouson[i1] );
  266.                     strcat( page_tyouson[i1], "村" );
  267.                     get_next_han2( page_yomi2[i1] );
  268.                     ichien_check( pnum[i1], pknum[i1] );
  269.  
  270.                     /* 郡へ戻る準備 */
  271.                     pass_back_han( '#' );
  272.                     bdelim = '#';
  273.                 }
  274.  
  275.                 if( bdelim == '#' ) {    /* 郡名 */
  276.  
  277.                     /* 郡名を得る */
  278.                     get_next_han( page_kugun[i1] );
  279.                     strcat( page_kugun[i1], "郡" );
  280.                     get_next_han2( page_yomi1[i1] );
  281.  
  282.                     /* 島しょなら、ヌルね */
  283.                     if( strcmp( page_kugun[i1], "島しょ郡" ) == 0 ) {
  284.                         strcpy( page_kugun[i1], "" );
  285.                         strcpy( page_yomi1[i1], "" );
  286.                     }
  287.  
  288.                     /* 県へ戻る準備 */
  289.                     pass_back_han( ' ' );
  290.                     bdelim = ' ';
  291.                 }
  292.  
  293.                 if( bdelim == ' ' ) {    /* 県名 */
  294.  
  295.                     /* 県名を得る */
  296.                     get_next_han( page_todou[i1] );
  297.                     get_next_han2( page_yomi0[i1] );
  298.  
  299.                 } else {
  300.                     printf("異常 501 : 独自検索で県名を突破した\n");
  301.  
  302.                     printf("point[ki]=|%d|\n",point[ki]);
  303.                     printf("joukyou[ki]=|%c|\n",joukyou[ki]);
  304.                     printf("page_todou[i1]=|%s|\n",page_todou[i1]);
  305.                     printf("page_kugun[i1]=|%s|\n",page_kugun[i1]);
  306.                     printf("page_tyouson[i1]=|%s|\n",page_tyouson[i1]);
  307.                     printf("page_azamei[i1]=|%s|\n",page_azamei[i1]);
  308.                     printf("bdelim=|%c|\n",bdelim);
  309.                     printf("\n");
  310.  
  311.                     return;
  312.                 }
  313.  
  314.                 printf("%4d: ", ki+1 );    /* 件数表示 */
  315.  
  316.                 if( shitei_ku_unkn && joukyou[ki] == '!' ) {
  317.                     printf("指定都市名");
  318.                 } else {
  319.                     switch( joukyou[ki] ) {
  320.                         case ' ':
  321.                             printf("都道府県名");
  322.                             break;
  323.                         case '#':
  324.                             printf("郡名\t");
  325.                             break;
  326.                         case '!':
  327.                             printf("市名\t");
  328.                             break;
  329.                         case ':':
  330.                             printf("町名\t");
  331.                             break;
  332.                         case ';':
  333.                             printf("村名\t");
  334.                             break;
  335.                         case '\"':
  336.                             printf("特別区名\t");
  337.                             break;
  338.                         case '$':
  339.                             printf("市内区名\t");
  340.                             break;
  341.                         case '%':
  342.                             printf("字名\t");
  343.                             break;
  344.                         default:
  345.                             printf("\t\t");
  346.                             break;
  347.                     }
  348.                 }
  349.  
  350.                 /* 長さの調整 */
  351.                 keta( page_todou[i1], page_yomi0[i1] );
  352.                 keta( page_kugun[i1], page_yomi1[i1] );
  353.                 keta( page_tyouson[i1], page_yomi2[i1] );
  354.                 keta( page_azamei[i1], page_yomi3[i1] );
  355.  
  356.                 /* 読みの表示 */
  357.                 printf(" ");
  358.                 kugiri();
  359.                 printf("%s",page_yomi0[i1]);
  360.                 kugiri();
  361.                 if( page_yomi1[i1][0] != '\0' ) {
  362.                     printf("%s", page_yomi1[i1] );
  363.                     kugiri();
  364.                 }
  365.                 if( page_yomi2[i1][0] != '\0' ) {
  366.                     printf("%s", page_yomi2[i1] );
  367.                     kugiri();
  368.                 }
  369.                 if( page_yomi3[i1][0] != '\0' ) {
  370.                     printf("%s", page_yomi3[i1] );
  371.                     kugiri();
  372.                 }
  373.                 puts("");
  374.  
  375.                 /* 次の行 */
  376.                 if( pnum[i1][0] != '\0' ) {    /* 番号が分かっていれば */
  377.                     if( k_suppress ) {
  378.                         printf("\t");
  379.                     } else {
  380.                         k_num_disp( pknum[i1] );
  381.                     }
  382.                     printf("%s", pnum[i1] );    /* 郵便番号表示 */
  383.                 } else {
  384.                     printf("\t\t ");
  385.                 }
  386.                 kugiri();
  387.  
  388.                 /* 地名の表示 */
  389.                 if( joukyou[ki] == ' ' ) {    /* 県からなら */
  390.                     moji_pr(page_todou[i1],input_str);    /* 色付き */
  391.                 } else {
  392.                     printf("%s",page_todou[i1]);    /* 普通に */
  393.                 }
  394.                 kugiri();
  395.                 if( page_kugun[i1][0] != '\0' ) {
  396.                     if( joukyou[ki] == '!' ||
  397.                         joukyou[ki] == '#' ||
  398.                         joukyou[ki] == '\"' ) {
  399.                         moji_pr(page_kugun[i1],input_str);
  400.                     } else {
  401.                         printf("%s",page_kugun[i1]);
  402.                     }
  403.                     kugiri();
  404.                 }
  405.                 if( page_tyouson[i1][0] != '\0' ) {
  406.                     if( joukyou[ki] == ':' ||
  407.                         joukyou[ki] == ';' ||
  408.                         joukyou[ki] == '$' ) {
  409.                         moji_pr(page_tyouson[i1],input_str);
  410.                     } else {
  411.                         printf("%s",page_tyouson[i1]);
  412.                     }
  413.                     kugiri();
  414.                 }
  415.                 if( page_azamei[i1][0] != '\0' ) {
  416.                     if( joukyou[ki] == '%' ) {
  417.                         moji_pr(page_azamei[i1],input_str);
  418.                     } else {
  419.                         printf("%s",page_azamei[i1]);
  420.                     }
  421.                     kugiri();
  422.                 }
  423.                 if( pnum[i1][0] == '*' ) {
  424.                     printf("(全域)");
  425.                 }
  426.                 puts("");
  427.             }
  428.  
  429.             /* キー入力 */
  430.             puts("");
  431.             printf("字名切替:a 旧番号切替:k 区切:d 厳密検索:g\n");
  432.             printf("地名選択:番号");
  433.             if( gen_page != zen_page ) {        /* 最終ページなら*/
  434.                 printf(" 次ページ:n");    /* 「次ページ」を表示しない */
  435.             }
  436.             if( gen_page != 1 ) {            /* 1ページ目なら */
  437.                 printf(" 前ページ:b");    /* 「前ページ」を表示しない */
  438.             }
  439.             printf(" 次検索:p 終了:q or e\n");
  440.             inpp.max = 64;
  441.             inpp.length = 64;
  442.  
  443.             lp = 1;
  444.             do{
  445.                 fep_off();
  446.                 _dos_gets( &inpp );
  447.                 strcpy( numbuff, inpp.buffer );
  448.  
  449.                 if( numbuff[0] == 'q' || numbuff[0] == 'Q' ||
  450.                     numbuff[0] == 'e' || numbuff[0] == 'E' ) {
  451.                     puts("");
  452.                     exit( 0 );
  453.  
  454.                 } else if( numbuff[0] == 'k' || numbuff[0] == 'K' ) {
  455.                     /* 旧番号モードトグル */
  456.                     if( k_suppress ) {
  457.                         k_suppress = 0;
  458.                     } else {
  459.                         k_suppress = 1;
  460.                     }
  461.                     break;
  462.  
  463.                 } else if( numbuff[0] == 'a' || numbuff[0] == 'A' ) {
  464.                     /* 字名モードトグル */
  465.                     if( azamei_gentei ) {
  466.                         azamei_gentei = 0;
  467.                     } else {
  468.                         azamei_gentei = 1;
  469.                     }
  470.                     break;
  471.  
  472.                 } else if( numbuff[0] == 'd' || numbuff[0] == 'D' ) {
  473.                     /* 区切りモードトグル */
  474.                     if( kugiri_mode ) {
  475.                         kugiri_mode = 0;
  476.                     } else {
  477.                         kugiri_mode = 1;
  478.                     }
  479.                     break;
  480.  
  481.                 } else if( numbuff[0] == 'g' || numbuff[0] == 'G' ) {
  482.                     /* 厳密モードトグル */
  483.                     if( genmitsu_mode ) {
  484.                         genmitsu_mode = 0;
  485.                     } else {
  486.                         genmitsu_mode = 1;
  487.                     }
  488.                     break;
  489.  
  490.                 } else if( numbuff[0] == 'n' || numbuff[0] == 'N' ||
  491.                        numbuff[0] == '\0' ) {
  492.                     /* 次のページへ */
  493.                     if( gen_page != zen_page ) {
  494.                         gen_page++;
  495.                         break;
  496.                     }
  497.                 } else if( numbuff[0] == 'b' || numbuff[0] == 'B' ) {
  498.                     /* 前のページへ */
  499.                     if( gen_page != 1 ) {
  500.                         gen_page--;
  501.                         break;
  502.                     }
  503.  
  504.                 } else if( numbuff[0] == 'p' || numbuff[0] == 'P' ) {
  505.                     /* 次検索へ */
  506.                     dokuji_sw = 1;
  507.                     return;
  508.                 }
  509.  
  510.                 /* 漢字かカナが入力された? */
  511.                 if( ismbblead( numbuff[0] ) ||        /* 1文字はダメよ */
  512.                   ( ismbbkana( numbuff[0] ) && strlen( numbuff ) >= 2 ) ) {
  513.                     dokuji_sw = 1;
  514.                     exist_moji = 1;
  515.                     strcpy( input_str, numbuff );
  516.                     return;
  517.                 }
  518.  
  519.                 /* 番号が合っているなら終わり */
  520.                 s_num = atoi( numbuff );
  521.                 if( s_num >= kijun+1 && s_num <= kijun+lpcnt ) {
  522.                     mainlp = 0;
  523.                     break;
  524.                 }
  525.  
  526.                 /* 合っていないなら、郵便番号か? */
  527.                 if( is_bangou_legal( numbuff ) ) {    /* 番号なら */
  528.                     dokuji_sw = 1;
  529.                     exist_moji = 1;
  530.                     strcpy( input_str, numbuff );    /* 番号として検索 */
  531.                     return;
  532.                 }
  533.  
  534.             } while ( lp );
  535.  
  536.         } while( mainlp );
  537.  
  538.         /* 選択された */
  539.         lpcnt = s_num % 12 - 1;    /* ページ中何番が選択されたか? */
  540.         if( lpcnt == -1 ) {
  541.             lpcnt = 11;
  542.         }
  543.         puts("");
  544.  
  545.         s_num--;
  546.  
  547.         if( pnum[lpcnt][0] != '\0' ) {        /* 番号が決まっているのなら */
  548.  
  549.             _dos_c_cls_al();
  550.  
  551.             /* 解析結果の表示 */
  552.             printf("\t   %s", page_yomi0[lpcnt] );        /* 読みがなの表示 */
  553.             kugiri();
  554.             if( page_yomi1[lpcnt][0] != '\0' ) {
  555.                 printf("%s", page_yomi1[lpcnt] );
  556.                 kugiri();
  557.             }
  558.             if( page_yomi2[lpcnt][0] != '\0' ) {
  559.                 printf("%s", page_yomi2[lpcnt] );
  560.                 kugiri();
  561.             }
  562.             printf("\n");
  563.             printf("解析結果 : %s", page_todou[lpcnt] );
  564.             kugiri();
  565.             if( page_kugun[lpcnt][0] != '\0' ) {
  566.                 printf("%s", page_kugun[lpcnt] );
  567.                 kugiri();
  568.             }
  569.             if( page_tyouson[lpcnt][0] != '\0' ) {
  570.                 printf("%s", page_tyouson[lpcnt] );
  571.                 kugiri();
  572.             }
  573.             printf("\n\n");
  574.  
  575.             /* 1件しかないね? */
  576.             if( pnum[lpcnt][0] == '*' ) {
  577.                 printf("%s%s", page_todou[lpcnt], page_kugun[lpcnt] );
  578.                 if( page_tyouson[lpcnt][0] != '\0' ) {
  579.                     moji_pr( page_tyouson[lpcnt], input_str );
  580.                 }
  581.                 printf("内の郵便番号はすべて %s ", &pnum[lpcnt][1] );
  582.                 if( !k_suppress ) {
  583.                     k_num_disp( pknum[lpcnt] );
  584.                 }
  585.                 printf(" です。\n");
  586.  
  587.             } else {
  588.  
  589.                 if( !k_suppress ) {
  590.                     k_num_disp( pknum[lpcnt] );
  591.                 }
  592.                 printf("%s", &pnum[lpcnt][1]  );    /* 頭は表示しない */
  593.                 printf(": ");
  594.                 moji_pr( page_azamei[lpcnt], input_str );
  595.                 printf("(%s)\n", page_yomi3[lpcnt] );
  596.             }
  597.             dokuji_sw = 1;
  598.  
  599.         } else {    /* 番号が決まっていない */
  600.  
  601. printf("警告 502 : この候補は、まだ検索できません。\n");
  602. dokuji_sw = 0;
  603.  
  604. //            if( joukyou[ s_num ] == ' ' ) {        /* 都道府県 */
  605. //
  606. //                ofs = point[ s_num ];
  607. //                todou_kensaku( page_todou[lpcnt], ofs );
  608. //            }
  609.         }
  610.  
  611.     }
  612.  
  613.     return;
  614. }
  615.